თავი 2. ADO-ს ობიექტური მოდელი

ობიექტი Recordset  (შემდეგ გვერდზე იხ. ობიექტი Command)
მაგალითი  
საწყობში საქონლის მოძრაობის მაგალითზე განვიხილოთ ობიექტებით Connection და  Recordset ADO ტექნოლოგიით ამ ამოცანის რეალიზაცია. დავაპროექტოთ ცხრილები: tbnasti, tbmigeba, tbgacema, რომლებიც ასახავენ საწყობში საქონლის არსებობას, საქონლის მიღებასა და საწყობიდან საქონლის გაცემას. მათი სტრუქტურა იდენტურია, კერძოდ/ცხრ.2.6 /


 ფორმის მოდულში ჩაწერილი პროგრამა შემდეგია:

Private Sub Rgan_Click()
Dim can As New ADODB.Recordset 
'ცვლადის გამოცხადება და ჩანაწერების ობიექტის ეგზემპლარის შექმნა tbnasti ცხრილში არსებული ჩანაწერების დასამუშავებლად 
Dim canm As New ADODB.Recordset 
'ცვლადის გამოცხადება და ჩანაწერების ობიექტის ეგზემპლარის შექმნა tbmigeba ცხრილში არსებული ჩანაწერების დასამუშავებლად
Dim cang As New ADODB.Recordset
 'ცვლადის გამოცხადება და ჩანაწერების ობიექტის ეგზემპლარის შექმნა tbgacema ცხრილში არსებული ჩანაწერების დასამუშავებლად
Dim dak As New ADODB.Connection
Set dak = CurrentProject.Connection 
’მიმდინარე ბაზასთან დაკავშირება
can.Open "tbnasti", dak, adOpenKeyset, adLockPessimistic, adCmdTable 
’ ბაზის გაღება და ცხრილიდან tbnasti ყველა ჩანაწერის ამორჩევა 
'
canm.Open "tbmigeba", dak, adOpenKeyset, adLockPessimistic, adCmdTable 
’ ბაზის გაღება და ცხრილიდან tbnasti ყველა ჩანაწერის ამორჩევა
'
cang.Open "tbgacema", dak, adOpenKeyset, adLockPessimistic, adCmdTable 
’ ბაზის გაღება და ცხრილიდან tbgacema  ყველა ჩანაწერის ამორჩევა
Select Case Me.Famor.Value
Case 1 ' საწყობში საქონლის მიღების რეჟიმის არჩევა
Dim i As String
s1 = Me.Vsaqoneli
i = " [saq_nomeri] = " & s1 & ""
can.Find i  
’ ცხრილში tbnasti ფორმის ველში Vsaqoneli ჩაწერილი საქონლის ნომრის ტოლი ნომრის მოძებნა
If can.EOF = False Then
can.Fields(3) = can.Fields(3) + Val(Me.Vrao)
’ საქონლის ნომრის არსებობის შემთხვევაში საწყობში არსებული რაოდენობის დამატება მიღებულ რაოდენობასთან. რაოდენობა რიცხვითი ტიპისაა.  TextBox-დან მიღებული მონაცემი ტექსტური ტიპისაა, ამიტომ გამოყენებულია ფუნქცია Val. მისი საშუალებით სტრიქონის ტიპი გადაიყვანება რიცხვით ტიპად. Access 2007-ში კონექტაცია პლუს ნიშნითაც ხორციელდება. ამ მიზეზის გამოც აუცილებელია ფუნქცის გამოყენება. წინააღმდეგ შემთხვევაში მიმატების ნაცვლად ადგილი ექნება კონექტაციას. ველში ნუმრით 3 ჩაწერილია რაოდენობის მნიშვნელობა. ველების ნუმერაცია ნულიდან იწყება, ამიტომ მისი ნუმერი სამია და არა ოთხი
can.Update
’ ჩატარებული ცვლილების დაფიქსირება ცხრილში 
Else
’ საწყობში ფორმაზე ჩაწერილი საქონლის ნუმრის არარსებობისას ჩანაწერის მიმატება ცხრილში tbnasti
'
With can
.AddNew ’ახალი ჩანაწერის დამატება ცხრილში
!saw_nomeri = vsawyobi
’ცხრილის ველისთვის ფორმაზე ჩაწერილი მნიშვნელობის მინიჭება
!saq_nomeri = Vsaqoneli
!tarigi = Vtarigi
!raodenoba = Vrao
!fasi = Vfasi
.Update
End With
End If
’ ცხრილში tbmigeba ჩანაწერის მიმატება
With canm
.AddNew
!saw_nomeri = vsawyobi
!saq_nomeri = Vsaqoneli
!tariri = Vtariri
!raodenoba = Vrao
!sez_fasi = Vfasi
.Update
End With
Case 2 ’ საწყობიდან საქონლის გაცემის რეჟიმის არჩევა
s1 = Me.Vsaqoneli
i = " [saq_nomeri] = " & s1 & ""
can.Find i
If can.EOF = False Then
If can.Fields(3) < Val(Me.Vrao) Then 
’თუ გასაცემი რაოდენობა მეტია საწყობში არსებულ რაოდენობაზე შეტყობინების გამოტანა
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "sawyobSi aris  " & can.Fields(3) & " Tqven apirebT gasceT " & Val(Me.Vrao)
Exit Sub
End If
can.Fields(3) = can.Fields(3) - Val(Me.Vrao)
can.Update
If can.Fields(3) = 0 Then
can.Delete 
’თუ საწყობიდან გაცემულ იქნა მთლიანდ არსებული რაოდენობა, მაშინ ცხრილიდან tbnasti ჩანაწერის ამოშლა
End If
With cang
.AddNew
!saw_nomeri = vsawyobi
!saq_nomeri = Vsaqoneli
!tariri = Vtariri
!raodenoba = Vrao
!sez_fasi = Vfasi
.Update
End With
’ საწყობიდან გაცემული საქონლის შესახებ ცხრილში tbgacema  ჩანაწერის მიმატება 
Else 
’შეტყობინების გამოტანა იმ შემთხვავაში, თუ ფორმაზე ჩაწერილი იქნა საწყობში არარსებული საქონლის ნუმერი
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "aseTi saqoneli ar arsebobs"
Exit Sub
End If
End Select
End Sub
ამ მაგალითში გამოიკვეთა ობიექტის Recordset-ის თვისებები და მეთოდები. ცხრილში 2.8 ჩამოთვლილია ობიექტის Recordset-ის ხშირად გამოყენებული თვისებები და მეთოდები/ცხრ. 2.8/:



სვეტის სახელი ცხრილში
               
       მონაცემის ტიპი
       სვეტის დასახელება
saw_nomeri
Integer
საწყობის ნომერი
saq_nomeri
Integer
საქონლის სანომენკლატურო ნომერი
tarigi
Date/Time
თარიღი
raodenoba
Integer
რაოდენობა
fasi
Single
ფასი
დავაპროექტოთ ფორმა, დავიტანოთ მასზედ მართვის ელემენტები/ცხრ.2.7/
მართვის ელემენტი                

სახელი ფორმაზე
დანიშნულება
TextBox
Vsawyobi
საწყობის ნომერი
TextBox
Vsaqoneli
საქონლის ნომერი
TextBox
Vtarigi
მიღების/გაცემის თარიღი
TextBox
Vrao
მიღებული/გაცემული რაოდენობა
TextBox
Vfasi
ფასი
Button
Rgan
გაანგარიშების შესრულება
Option Button
Omigeba
საქონლის მიღების რეჟიმში გადასვლა
Option Button
Ogacema
საქონლის გაცემის რეჟიმში გადასვლა
დასახელება        
დანიშნულება
თვისებები:

RecordCount
ამორჩეული ჩანაწერების რაოდენობა
EOF
ამორჩეული ჩანაწერების სიმრავლის ბოლო (ამორჩეული ჩანაწერები ქმნიან ვირტუალურ ფაილს, EOF - კი გვიჩვენებს ფაილის ბოლოს)
Fields
გვიჩვენებს ჩანაწერის ველს (ცხრილის სვეტს). მისი იდენტიფიკაცია ხორციელდება ნუმრით ან სახელით. ველების ნუმერაცია ნულიდან იწყება.  Fields(1) გვიჩვენებს ცხრილის მეორე სვეტს
AbsolutePosition
გვიჩვენებს ჩანაწერის ადგილს ამორჩეულ ჩანაწერთა სიმრავლეში. მისი მნიშვნელობებია:  adPosBOF ან adPosEOF ან  adPosUnknown. მაგ. t = can.AbsolutePosition გვიჩვენებს ჩანაწერის ნუმერს ჩანაწერთა სიმრავლეში
Filter
ამორჩევის პირობების მითითება
Bookmark
ჩანაწერების სიმრავლეში ჩანართის შექმნა
მეთოდები

AddNew
ჩანაწერის დამატება
Update
ჩანაწერის განახლება
MoveFirst
გადაადგილება პირველ ჩანაწერზე
MoveLast
გადაადგილება ბოლო ჩანაწერზე
MoveNext
გადაადგილება შემდეგ ჩანაწერზე
MovePrevious
გადაადგილება წინა ჩანაწერზე
Clone
ჩანაწერების კლონირება თვისებით adLockBatchOptimistic ან adLockOptimistic ან adLockPessimistic ან adLockReadOnly
Close
ჩანაწერების დახურვა
Delete
ჩანაწერის (ების) წაშლა
Find
ჩანაწერების ძიება გარკვეული კრიტერიუმებით
Open
ჩანაწერების გაღება
Requery
ჩანაწერების მიმართვა
Save
ჩანაწერების დამახსოვრება
Sort
ჩანაწერების დახარისხება